package br.com.dallasmotopecas.conhecimento.relatorio.vendedor.controller;

import java.sql.Connection;
import java.util.List;

import javax.faces.context.ExternalContext;

import br.com.dallasmotopecas.comum.agenda.controller.AgendaClienteAtendimentoController;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaClienteAtendimentoVo;
import br.com.dallasmotopecas.comum.cliente.controller.ClienteDadosController;
import br.com.dallasmotopecas.comum.cliente.vo.ClienteDadosVo;
import br.com.dallasmotopecas.seguranca.usuario.controller.UsuarioController;
import br.com.dallasmotopecas.seguranca.usuario.vo.UsuarioVo;
import br.com.dallasmotopecas.util.controller.AbstractController;
import br.com.dallasmotopecas.util.data.ManipulacaoData;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.ConsultarObjetoException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;

public class RelVendedorController extends AbstractController
{
	public RelVendedorController(Connection connection) throws ConexaoException
	{
		super(connection);
	}

	public RelVendedorController(ExternalContext externalContext) throws ClasseNaoEncontradaException, ConexaoException
	{
		super(externalContext);
	}
	
	public void carregarDadosRelatorio(List<ClienteDadosVo> listaClienteDetalhe, ClienteDadosVo clienteDadosVo, List<AgendaClienteAtendimentoVo> listaTpAtendimentos) throws ListarObjetoException, ConexaoException, ConsultarObjetoException
	{
		ClienteDadosController clienteDadosController = null;
		AgendaClienteAtendimentoVo agendaClienteAtendimentoVo = null;
		AgendaClienteAtendimentoController agendaClienteAtendimentoController = null;
		ClienteDadosVo dadosVo = null;
		UsuarioVo usuarioVo = null;
		UsuarioController usuarioController = null;
		try
		{
			clienteDadosController = new ClienteDadosController(getConnection());
			clienteDadosController.carregarLstPorVendedor(listaClienteDetalhe, clienteDadosVo);
			
			agendaClienteAtendimentoVo = new AgendaClienteAtendimentoVo();
			agendaClienteAtendimentoVo.getAgendaClienteVo().getAgendaVo()
			.setDataInicialSemana(new java.sql.Date(ManipulacaoData.getPrimeiroDiaMes(clienteDadosVo.getMesCompetencia() - 1, clienteDadosVo.getAnoCompetencia()).getTime()));
			
			agendaClienteAtendimentoVo.getAgendaClienteVo().getAgendaVo()
			.setDataFinalSemana(new java.sql.Date(ManipulacaoData.getUltimoDiaMes(clienteDadosVo.getMesCompetencia() - 1, clienteDadosVo.getAnoCompetencia()).getTime()));
			
			agendaClienteAtendimentoController = new AgendaClienteAtendimentoController(getConnection());
			agendaClienteAtendimentoController.listaTipoAtGeral(agendaClienteAtendimentoVo, listaTpAtendimentos);
			
			usuarioController = new UsuarioController(getConnection());
			
			for (int i = 0; i < listaClienteDetalhe.size(); i++)
			{
				dadosVo = new ClienteDadosVo();
				dadosVo.setMesCompetencia(clienteDadosVo.getMesCompetencia());
				dadosVo.setAnoCompetencia(clienteDadosVo.getAnoCompetencia());
				dadosVo.getFuncionarioVo().setId(listaClienteDetalhe.get(i).getFuncionarioVo().getId());
				clienteDadosController.carregarListaDados(listaClienteDetalhe.get(i).getListaClienteDados(), dadosVo);
				
				usuarioVo = new UsuarioVo();
				usuarioVo.getFuncionarioVo().setId(listaClienteDetalhe.get(i).getFuncionarioVo().getId());
				
				usuarioController.consultarUsuario(usuarioVo);
				
				listaClienteDetalhe.get(i).getFuncionarioVo().setCorVenda("#" + usuarioVo.getCorVenda());
			}
		}
		catch(ListarObjetoException e)
		{
			throw e;
		}
		catch (ConexaoException e)
		{
			throw e;
		}
		catch (ConsultarObjetoException e)
		{
			throw e;
		}
		finally
		{
			clienteDadosController = null;
			agendaClienteAtendimentoVo = null;
			agendaClienteAtendimentoController = null;
			dadosVo = null;
			usuarioVo = null;
			usuarioController = null;
		}
	}
	
	public void carregarListaAtendimentosClienteGeral(List<AgendaClienteAtendimentoVo> listaAtendinentosClientes, ClienteDadosVo clienteDadosVo) throws ListarObjetoException, ConexaoException
	{
		AgendaClienteAtendimentoController agendaClienteAtendimentoController = null;
		AgendaClienteAtendimentoVo agendaClienteAtendimentoVo = null;
		try
		{
			if (listaAtendinentosClientes != null && clienteDadosVo != null)
			{
				listaAtendinentosClientes.clear();
				
				agendaClienteAtendimentoVo = new AgendaClienteAtendimentoVo();
				agendaClienteAtendimentoVo.getAgendaClienteVo().getClienteVo().setId(clienteDadosVo.getClienteVo().getId());
				agendaClienteAtendimentoVo.getAgendaClienteVo().getAgendaVo()
				.setDataInicialSemana(new java.sql.Date(ManipulacaoData.getPrimeiroDiaMes(clienteDadosVo.getMesCompetencia() - 1, clienteDadosVo.getAnoCompetencia()).getTime()));
				
				agendaClienteAtendimentoVo.getAgendaClienteVo().getAgendaVo()
				.setDataFinalSemana(new java.sql.Date(ManipulacaoData.getUltimoDiaMes(clienteDadosVo.getMesCompetencia() - 1, clienteDadosVo.getAnoCompetencia()).getTime()));
				
				agendaClienteAtendimentoController = new AgendaClienteAtendimentoController(getConnection());
				agendaClienteAtendimentoController.lstAtenTipoCliSintetico(agendaClienteAtendimentoVo, listaAtendinentosClientes);
				
				for (int i = 0; i < listaAtendinentosClientes.size(); i++)
				{
					agendaClienteAtendimentoVo = new AgendaClienteAtendimentoVo();
					
					agendaClienteAtendimentoVo.getAgendaClienteVo().getClienteVo().setId(clienteDadosVo.getClienteVo().getId());
					agendaClienteAtendimentoVo.getAgendaClienteVo().getAgendaVo()
					.setDataInicialSemana(new java.sql.Date(ManipulacaoData.getPrimeiroDiaMes(clienteDadosVo.getMesCompetencia() - 1, clienteDadosVo.getAnoCompetencia()).getTime()));
					
					agendaClienteAtendimentoVo.getAgendaClienteVo().getAgendaVo()
					.setDataFinalSemana(new java.sql.Date(ManipulacaoData.getUltimoDiaMes(clienteDadosVo.getMesCompetencia() - 1, clienteDadosVo.getAnoCompetencia()).getTime()));
					
					agendaClienteAtendimentoVo.getAgendaTipoAtendimentoVo().setId(listaAtendinentosClientes.get(i).getAgendaTipoAtendimentoVo().getId());
					agendaClienteAtendimentoVo.getAgendaTipoContatoVo().setId(listaAtendinentosClientes.get(i).getAgendaTipoContatoVo().getId());
					
					agendaClienteAtendimentoController.lstAtenTipoCliAnalitico(agendaClienteAtendimentoVo, listaAtendinentosClientes.get(i).getListaAtendimentos());
				}
			}
		}
		catch(ListarObjetoException e)
		{
			throw e;
		}
		catch (ConexaoException e)
		{
			throw e;
		}
		finally
		{
			agendaClienteAtendimentoController = null;
			agendaClienteAtendimentoVo = null;
		}
	}

}
